/**
 * @file easy_led.h
 * @author 不咸不要钱 (main_2018@163.com)
 * @brief  led驱动头文件
 * @version 0.1
 * @date 2021-11-24
 * 
 * @copyright Copyright (c) 2019
 * 
 */
#ifndef __EASY_LED_H
#define __EASY_LED_H

#include <stdint.h>

#ifdef __cplusplus
    extern "C" {
#endif

/*! 时钟节拍最大值 uint16_t 0xFFFF */
#define TICKS_MAX  (0xFFFF)

/*! 函数指针 指向led控制函数（该函数有一个参数 参数为0时 LED 亮） */
typedef void (*ledControl_t)(uint8_t);

/** 
  * @brief uLED结构体
  * @note  无
  */
typedef struct eLED
{
    uint16_t       ulTicks;               /*!< 时钟节拍  */
    uint16_t       ulLedOnDefaultTicks;   /*!< 默认状态闪烁时 led点亮的节拍数  */
    uint16_t       ulLedOffDefaultTicks;  /*!< 默认状态闪烁时 led关闭的节拍数  */
    uint16_t       ulLedOnTicks;          /*!< 使用uLedSet函数后 led闪烁时点亮的节拍数  */
    uint16_t       ulLedOffTicks;         /*!< 使用uLedSet函数后 led闪烁时关闭的节拍数  */
    uint16_t       ulKeepTicks;           /*!< 使用uLedSet函数后 led闪烁持续时间        */
    ledControl_t   ledControl;            /*!< 指向led控制函数    */
    struct eLED *  ptNextLed;             /*!< 指向下一个led对象  */
}eLED_T;


void eled_init(eLED_T * uLed, ledControl_t ledControl, uint16_t ledOnDefaultTicks, uint16_t ledOffDefaultTicks);
void eled_set(eLED_T * uLed, uint16_t ledOnTicks, uint16_t ledOffTicks, uint16_t keepTicks);
void eled_set_default(eLED_T * eLed, uint16_t ledOnDefaultTicks, uint16_t ledOffDefaultTicks);
void eled_stop(eLED_T * eLed);
void eled_ticks(void);

#ifdef __cplusplus
    }
#endif


#endif
